#ifndef MUSIC_PLAYER_H
#define MUSIC_PLAYER_H

#include <QWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QLabel>
#include <QPushButton>
#include <QSlider>
#include <QList>
#include <QDialog>
#include <QFormLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPixmap>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QVector>
#include <QPair>


class music_player : public QWidget
{
    Q_OBJECT
public:
    explicit music_player(QWidget *parent = nullptr);
    ~music_player() override;
    
    // 添加音乐到播放列表，新增歌手图片参数
    void addMusic(const QString &title, const QString &singer, const QString &lyric, 
                   const QString &filePath, const QString &singerImagePath, const QString &songId);
       
    // 设置当前播放的音乐索引
       void setCurrentMusicIndex(int index);
    
    
signals:
        
        
public slots:
    void playPause();
    void prev();
    void next();
    void updatePosition(qint64 position);
    void setPosition(int position);
    void updateDuration(qint64 duration);
    void onPopupButtonClicked(); // 弹窗按钮点击事件
    
    void onLyricReplyFinished(QNetworkReply *reply); // 歌词请求完成回调
    void updateLyricDisplay(); // 更新歌词显示

private:
    
   
    void initUI();
    void initConnections();
    void updateMusicInfo();
    void createPopupDialog(); // 创建弹窗
    void fetchLyric(const QString &songId); // 获取歌词
    void parseLyricText(const QString &lyricText); // 解析歌词文本

    QLabel *titleLabel;       // 歌曲标题
    QLabel *singerLabel;      // 歌手名
    QLabel *lyricLabel;       // 歌曲歌词
    QLabel *singerImageView;  // 歌手图片
    QPushButton *prevBtn;     // 上一曲按钮
    QPushButton *playPauseBtn;// 播放/暂停按钮
    QPushButton *nextBtn;     // 下一曲按钮
    QPushButton *popupBtn;    // 左上角弹窗按钮
    QSlider *progressSlider;  // 进度条
    QLabel *timeLabel;        // 时间显示
    QWidget *progressContainer; // 进度条和时间条容器
    
    QMediaPlayer *player;     // 媒体播放器
    QMediaPlaylist *playlist;   // 播放列表  
    QDialog *popupDialog;     // 弹窗
    
    
    QNetworkAccessManager *networkManager; // 网络请求管理器
    QTimer *lyricTimer; // 歌词滚动定时器
    QVector<QPair<qint64, QString>> lyricLines; // 存储歌词（时间戳+文本）
    int currentLyricIndex; // 当前显示的歌词索引
        
    
    // 音乐信息结构体
    struct MusicInfo {
        QString title;
        QString singer;
        QString lyric;
        QString filePath;
        QString singerImagePath;
        QString songId; // 新增：网易云歌曲ID
    };
    
    QList<MusicInfo> musicList;  // 音乐列表
    int currentIndex;            // 当前播放索引
    bool isPlaying;              // 播放状态
    
};

#endif // MUSIC_PLAYER_H
